home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / Kubuntu 8.10 / kubuntu-8.10-desktop-i386.iso / casper / filesystem.squashfs / usr / lib / user-setup / user-setup-apply < prev    next >
Text File  |  2008-08-22  |  7KB  |  235 lines

  1. #! /bin/sh
  2. set -e
  3.  
  4. . /usr/share/debconf/confmodule
  5.  
  6. if [ "$1" ]; then
  7.     ROOT="$1"
  8.     chroot=chroot
  9.     log='log-output -t user-setup'
  10. else
  11.     ROOT=
  12.     chroot=
  13.     log=
  14. fi
  15.  
  16. . /usr/lib/user-setup/functions.sh
  17.  
  18. # Set a password, via chpasswd.
  19. # Use a heredoc rather than echo, to avoid the password
  20. # showing in the process table. (However, this is normally
  21. # only called when first installing the system, when root has no
  22. # password at all, so that should be an unnecessary precaution).
  23. #
  24. # Pass in three arguments: the user, the password, and 'true' if the
  25. # password has been pre-crypted (by preseeding).
  26. setpassword () {
  27.     local USER PASSWD OPTS
  28.     USER="$1"
  29.     PASSWD="$2"
  30.     if [ "$3" = true ]; then
  31.         OPTS=-e
  32.     else
  33.         OPTS=-m
  34.     fi
  35.     $chroot $ROOT chpasswd $OPTS <<EOF
  36. $USER:$PASSWD
  37. EOF
  38. }
  39.  
  40. # Enable/disable shadow passwords.
  41. db_get passwd/shadow
  42. if [ "$RET" = true ]; then
  43.     $log $chroot $ROOT shadowconfig on
  44. else
  45.     $log $chroot $ROOT shadowconfig off
  46. fi
  47.  
  48. if ! root_password; then
  49.     # Was the root password preseeded encrypted?
  50.     if db_get passwd/root-password-crypted && [ "$RET" ]; then
  51.         # The root password was preseeded encrypted.
  52.         ROOT_PW="$RET"
  53.         PRECRYPTED=true
  54.     else
  55.         db_get passwd/root-password
  56.         ROOT_PW="$RET"
  57.         PRECRYPTED=false
  58.     fi
  59.     # Clear the root password from the database, and set the password.
  60.     db_set passwd/root-password-crypted ''
  61.     db_set passwd/root-password ''
  62.     db_set passwd/root-password-again ''
  63.     if [ "$ROOT_PW" ]; then
  64.         setpassword root "$ROOT_PW" "$PRECRYPTED"
  65.     fi
  66.     ROOT_PW=
  67. else
  68.     # Just in case, clear any preseeded root password from the database
  69.     # anyway.
  70.     db_set passwd/root-password-crypted ''
  71.     db_set passwd/root-password ''
  72.     db_set passwd/root-password-again ''
  73. fi
  74.  
  75. db_get passwd/make-user
  76. if [ "$RET" = true ] && ! is_system_user; then
  77.     if db_get passwd/user-password-crypted && [ "$RET" ]; then
  78.         USER_PW="$RET"
  79.         USER_PW_CRYPTED=true
  80.     else
  81.         db_get passwd/user-password
  82.         USER_PW="$RET"
  83.         USER_PW_CRYPTED=false
  84.     fi
  85.  
  86.     if db_get passwd/user-uid && [ "$RET" ]; then
  87.         if [ -x $ROOT/usr/sbin/adduser ]; then
  88.             UIDOPT="--uid $RET"
  89.         else
  90.             UIDOPT="-u $RET"
  91.         fi
  92.     else
  93.         UIDOPT=
  94.     fi
  95.  
  96.     # Add the user to the database, using adduser in noninteractive
  97.     # mode.
  98.     db_get passwd/username
  99.     USER="$RET"
  100.     db_get passwd/user-fullname
  101.  
  102.     HOME_EXISTED=
  103.     if [ -d "$ROOT/home/$USER" ]; then
  104.         HOME_EXISTED=1
  105.     fi
  106.  
  107.     if [ -x $ROOT/usr/sbin/adduser ]; then
  108.         $log $chroot $ROOT adduser --disabled-password --gecos "$RET" $UIDOPT "$USER" >/dev/null || true
  109.     else
  110.         $log $chroot $ROOT useradd -c "$RET" -m "$USER" $UIDOPT >/dev/null || true
  111.     fi
  112.  
  113.     # Clear the user password from the database.
  114.     db_set passwd/user-password-crypted ''
  115.     db_set passwd/user-password ''
  116.     db_set passwd/user-password-again ''
  117.     setpassword "$USER" "$USER_PW" "$USER_PW_CRYPTED"
  118.  
  119.     if [ "$HOME_EXISTED" ]; then
  120.         # The user's home directory already existed before we called
  121.         # adduser. This often means that a mount point under
  122.         # /home/$USER was selected in (and thus created by) partman,
  123.         # and the home directory may have ended up owned by root.
  124.         $log $chroot $ROOT chown "$USER:$USER" "/home/$USER" >/dev/null || true
  125.     fi
  126.  
  127.     if [ -n "$USER" ]; then
  128.         for group in lpadmin sambashare; do
  129.             $log $chroot $ROOT addgroup --system $group >/dev/null 2>&1 || true
  130.         done
  131.         if type archdetect >/dev/null 2>&1; then
  132.             SUBARCH="$(archdetect)"
  133.             case $SUBARCH in
  134.                 powerpc/ps3|powerpc/cell)
  135.                     $log $chroot $ROOT addgroup --system spu >/dev/null 2>&1 || true
  136.                     ;;
  137.             esac
  138.         fi
  139.         db_get passwd/user-default-groups
  140.         for group in $RET; do
  141.             $log $chroot $ROOT adduser "$USER" $group >/dev/null 2>&1 || true
  142.         done
  143.  
  144.          # Configure desktop auto-login if instructed by preseeding
  145.          db_get passwd/auto-login
  146.          if [ "$RET" = true ]; then
  147.             # chroot needed to handle symlinks correctly
  148.             if $chroot $ROOT [ -f /etc/gdm/gdm-cdd.conf ]; then
  149.                 GDMCONF=/etc/gdm/gdm-cdd.conf
  150.             else
  151.                 GDMCONF=/etc/gdm/gdm.conf
  152.             fi
  153.      
  154.             # chroot needed to handle symlinks correctly
  155.             if $chroot $ROOT [ -f "$GDMCONF" ]; then
  156.                 # Configure GDM autologin
  157.                 $log $chroot $ROOT sed -i \
  158.                     -e "s/^AutomaticLoginEnable=.*\$/AutomaticLoginEnable=true/" \
  159.                     -e "s/^AutomaticLogin=.*\$/AutomaticLogin=$USER/" \
  160.                     -e "s/^TimedLoginEnable=.*\$/TimedLoginEnable=true/" \
  161.                     -e "s/^TimedLogin=.*\$/TimedLogin=$USER/" \
  162.                     -e "s/^TimedLoginDelay=.*\$/TimedLoginDelay=10/" \
  163.                     "$GDMCONF"
  164.             fi
  165.      
  166.             if $chroot $ROOT [ -f /etc/kde3/kdm/kdmrc ]; then
  167.                 # Configure KDM autologin
  168.                 $log $chroot $ROOT sed -i -r \
  169.                     -e "s/^#?AutoLoginEnable=.*\$/AutoLoginEnable=true/" \
  170.                     -e "s/^#?AutoLoginUser=.*\$/AutoLoginUser=$USER/" \
  171.                     -e "s/^#?AutoReLogin=.*\$/AutoReLogin=true/" \
  172.                     /etc/kde3/kdm/kdmrc
  173.             fi
  174.         fi
  175.     fi
  176.  
  177.     db_get passwd/root-login
  178.     if [ "$RET" = false ] && [ -n "$USER" ]; then
  179.         # Ensure sudo is installed, and set up the user to be able
  180.         # to use it.
  181.         if [ ! -e $ROOT/etc/sudoers ]; then
  182.             # try to work in d-i and out; it's better to
  183.             # use apt-install in d-i
  184.             apt-install sudo 2>/dev/null || $log $chroot $ROOT apt-get -q -y install sudo || true
  185.         fi
  186.         if [ -e $ROOT/etc/sudoers ]; then
  187.             $log $chroot $ROOT addgroup --system admin >/dev/null 2>&1 || true
  188.             $log $chroot $ROOT adduser "$USER" admin >/dev/null 2>&1 || true
  189.             cat <<EOF >>$ROOT/etc/sudoers
  190.  
  191. # Members of the admin group may gain root privileges
  192. %admin ALL=(ALL) ALL
  193. EOF
  194.         else
  195.             # sudo failed to install, system won't be usable
  196.             exit 1
  197.         fi
  198.         # Configure gksu to use sudo, via an alternative, if it's
  199.         # installed and the alternative is registered.
  200.         if $chroot $ROOT update-alternatives --display libgksu-gconf-defaults >/dev/null 2>&1; then
  201.             $log $chroot $ROOT update-alternatives --set libgksu-gconf-defaults /usr/share/libgksu/debian/gconf-defaults.libgksu-sudo
  202.             $log $chroot $ROOT update-gconf-defaults
  203.         fi
  204.     fi
  205.  
  206.     db_get user-setup/encrypted-private
  207.     if [ "$RET" = true ]; then
  208.         if ! $chroot $ROOT which ecryptfs-setup-private >/dev/null 2>&1; then
  209.             # try to work in d-i and out; it's better to
  210.             # use apt-install in d-i
  211.             apt-install ecryptfs-utils 2>/dev/null || $log $chroot $ROOT apt-get -q -y install ecryptfs-utils || true
  212.         fi
  213.         db_get user-setup/encrypted-private-passphrase
  214.         ENCRYPTED_PW="$RET"
  215.         USER="$USER" LOGINPASS="$USER_PW" MOUNTPASS="$ENCRYPTED_PW" \
  216.             $log $chroot $ROOT \
  217.             su -p "$USER" -c ecryptfs-setup-private
  218.         # Clear the mount passphrase from the database.
  219.         db_set user-setup/encrypted-private-passphrase ''
  220.         db_set user-setup/encrypted-private-passphrase-again ''
  221.     fi
  222. else
  223.     # Just in case, clear any preseeded user password from the database
  224.     # anyway.
  225.     db_set passwd/user-password-crypted ''
  226.     db_set passwd/user-password ''
  227.     db_set passwd/user-password-again ''
  228.     # Do the same for the mount passphrase, if any.
  229.     db_set user-setup/encrypted-private-passphrase ''
  230.     db_set user-setup/encrypted-private-passphrase-again ''
  231.     db_subst user-setup/encrypted-private-passphrase-display PASSPHRASE ''
  232. fi
  233.  
  234. exit 0
  235.